package nyist.media.repository;

import nyist.media.bean.auth.MenuTreeBean;
import nyist.media.entity.admin.MenuAuth;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import javax.persistence.criteria.JoinType;
import java.util.List;

/**
 * @author : dcf
 * @date : 2019/3/12
 */

public interface MenuAuthRepository extends BaseRepository<MenuAuth, Long> {


    /**
     * 分页查询菜单权限信息
     *
     * @param parentId 上级ID
     * @param pageable 分页对象
     * @return 菜单权限列表
     */
    default Page<MenuAuth> findPage(Long parentId, Pageable pageable) {
        return findAll((root, query, cb) -> {
            if (parentId != null) {
                return cb.equal(root.join("parent", JoinType.INNER).get("id"), parentId);
            } else {
                return root.get("parent").isNull();
            }
        }, pageable);
    }

    /**
     * 根据权限类型 、查询权限列表
     *
     * @param type 权限类型 0：菜单 1：目录
     * @return 菜单权限列表信息
     */
    @Query(nativeQuery = true, value = "select ma.* from m_p_menu_auth ma where ma.type = :type AND ma.enabled = 1 order by ma.grade asc, ma.parent_id desc")
    List<MenuAuth> findMenuList(@Param("type") int type);

    /**
     * 统计菜单的下级菜单数量
     *
     * @param auth 当前菜单
     * @return 统计结果
     */
    Integer countAllByParent(MenuAuth auth);

    /**
     * 查询父类菜单信息
     *
     * @return 父类菜单信息
     */
    List<MenuAuth> findAllByParentIsNull();
}

